package com.gaojinqi.base.core.sys.config;

import java.util.Map;

/**
 * 配置上下文，获取配置使用
 *
 * @author gaojinqi
 * @version 1.0
 * @since 2020年04月14日
 */
public interface ConfigContext {

    /**
     * 根据 key 获取 参数值
     */
    Object get(String key);

    /**
     * 获取所有
     */
    Map<String, Object> getAll();

    /**
     * 将新的 key-val存入上下文
     */
    void put(String key, Object val);

    /**
     * 将多个key-val存入上下文
     */
    void putAll(Map<String, Object> params);

    /**
     * 删除 指定key
     * 以系统前缀开头的不能删
     *
     * @see ConfigConst
     */
    void remove(String key);

    /**
     * 清空所有配置
     */
    void clear();

    /**
     * 根据 key 获取 参数值
     * 返回字符串
     */
    default String getStr(String key) {
        Object val = get(key);
        return val == null ? null : String.valueOf(val);
    }

    /**
     * 根据 key 获取 参数值
     * 返回Int类型
     */
    default Integer getInt(String key) {
        String val = getStr(key);
        return val == null ? null : Integer.valueOf(val);
    }

    /**
     * 根据 key 获取 参数值
     * 返回Int类型
     */
    default Long getLong(String key) {
        String val = getStr(key);
        return val == null ? null : Long.valueOf(val);
    }

    /**
     * 根据 key 获取 参数值
     * 返回Int类型
     */
    default Boolean getBool(String key) {
        String val = getStr(key);
        return val == null ? null : Boolean.valueOf(val);
    }

    /**
     * 根据 key 获取 参数值
     * 返回Int类型
     */
    default Double getDouble(String key) {
        String val = getStr(key);
        return val == null ? null : Double.valueOf(val);
    }

}
